<?php	

/* Converti une chaine php en une chaine directement utilisable dans une requete SQL
	$subChars = indique si oui ou non les caractères de substitution des conditions LIKE doivent être protégés
	$prefix = indique la chaine qui ne sera pas transformée à ajouter au début de la valeur
	$suffix = indique la chaine qui ne sera pas transformée à ajouter à la fin de la valeur
*/
function mysqlString($str, $subChars=false, $prefix="", $suffix=""){

	if($str == "" || $str == null){
		$str = "NULL";
	}else{
		$str = addslashes($str);
		$str = str_replace("\\\"", "\"", $str);

		if($subChars){
			$str = str_replace("%", "\%", $str);
			$str = str_replace("_", "\_", $str);
		}
		
		$str = "'".$prefix.$str.$suffix."'";
	}
	
	return $str;
	
}

// Construit l'arbre d'une association reflexive de type X,1 -> X,n, et la retourne dans un tableau
function recSQLRequest_1n($value, $fieldID, $fieldREC, $table, $link = null){

	if(is_string($value)){ // si c'est une chaine de caractère, on la formate
		$f_value = mysqlString($value);
	}else if(is_bool($value)){
		$f_value = (int)$value;
	}else{
		$f_value = $value;
	}

	// création dela requête
	$rq = "SELECT t1.* , t2.* ";
	$rq .= "FROM ".$table." t1 ";
	$rq .= "LEFT JOIN ".$table." t2 ON t1.".$fieldID." = t2.".$fieldREC." ";
	if(is_null($value)){
		$rq .= "WHERE t1.".$fieldREC." IS NULL ";
	}else{
		$rq .= "WHERE t1.".$fieldREC." = ".$f_value." ";
	}
	$rq .= "GROUP BY t1.".$fieldID." ";

	$rs = mysql_query($rq, $link);
	
	// On recherche la position du champ identifiant
	global $pos_fieldID; // variable réutilisable par tous les appels récursifs indiquant la position du champs identifiant
	global $pos_nbFields; // variable réutilisable par tous les appels récursifs indiquant le nombre de champs
	if(!isset($pos_fieldID)){
		$fieldID_lower = mb_strtolower($fieldID);
		$i = 0;
		while(mb_strtolower(mysql_field_name($rs, $i)) != $fieldID_lower){
			$i++;
		}
		$pos_fieldID = $i;
	}
	// On compte le nombre de champs
	if(!isset($pos_nbFields)){
		$pos_nbFields = mysql_num_fields($rs)/2;
	}
	
	$tab = array();
	$i = 0;
	while($lig = mysql_fetch_row($rs)){
		for($j=0; $j<$pos_nbFields; $j++){
			$tab[$i][$j] = $lig[$j];
		}
		if(!is_null($lig[$pos_nbFields])){
			$tab[$i][$pos_nbFields] = recSQLRequest_1n((int)$lig[$pos_fieldID], $fieldID, $fieldREC, $table, $link);
		}else{
			$tab[$i][$pos_nbFields] = null;
		}
		$i++;
	}
	mysql_free_result($rs);
	
	return $tab;

}

// Converti un booléen PHP en une valeur booléenne utilisable  dans une requete SQL
function mysqlBool($bool){

	if($bool){
		return "1";
	}else{
		return "0";
	}
	
}

// retourne la valeur maximale du champ indiqué dans la table donnée
function valueMax($field, $table, $link = null){

	$rq = "SELECT MAX(".$field.") ";
	$rq .= "FROM ".$table." ";
	
	$rs = mysql_query($rq, $link);
	$tab = mysql_fetch_row($rs);
	
	mysql_free_result($rs);
	
	return $tab[0];

}

// retourne la valeur minimale du champ indiqué dans la table donnée
function valueMin($field, $table, $link = null){

	$rq = "SELECT MIN(".$field.") ";
	$rq .= "FROM ".$table." ";
	
	$rs = mysql_query($rq, $link);
	$tab = mysql_fetch_row($rs);
	
	mysql_free_result($rs);
	
	return $tab[0];

}

// retourne le nombre d'occurence de la valeur indiquée pour le champ et la table donnée
function valueExists($value, $field, $table, $link = null){

	if(is_string($value)){ // si c'est une chaine de caractère, on la formate
		$f_value = mysqlString($value);
	}else if(is_bool($value)){
		$f_value = (int)$value;
	}else if(is_null($value)){
		$f_value = "NULL";
	}else{
		$f_value = $value;
	}

	$rq = "SELECT COUNT(*) ";
	$rq .= "FROM ".$table." ";
	$rq .= "WHERE ".$field." = ".$f_value." ";
	
	$rs = mysql_query($rq, $link);
	$tab = mysql_fetch_row($rs);
	
	mysql_free_result($rs);
	
	return $tab[0];

}

// converti une date au format français
function dateFr($date){

	return date("d/m/Y", strtotime($date));

}

// test si une variable est un entier sans tenir compte du type de la variable ("12" et 12 renvoient vrai)
function numericInt($var){

	if(mb_ereg("^\-?[0-9]+$", $var) == 1){
		return true;
	}else{
		return false;
	}

}

// test si une chaine de caractère est vide
function emptyString($str){

	if($str == null){
		return true;
	}else if(mb_strlen($str) == 0){
		return true;
	}else{
		return false;
	}

}

// compare deux chaines sans tenir compte des accents
function strcmpCollation($str1, $str2){

	$old = array('à','á','â','ã','ä','å','ò','ó','ô','õ','ö','ø','è','é','ê','ë','ç','ì','í','î','ï','ù','ú','û','ü','ÿ','ñ','œ','æ');
	$new = array('a','a','a','a','a','a','o','o','o','o','o','o','e','e','e','e','c','i','i','i','i','u','u','u','u','y','n','oe','ae');
	
	$str1 = mb_strtolower($str1);
	$str2 = mb_strtolower($str2);
	
	$raw_str1 = str_replace($old, $new, $str1);
	$raw_str2 = str_replace($old, $new, $str2);

	return ($raw_str1 == $raw_str2);

}

// réduit une chaine en gardant les $nb/2 premiers et les $nb/2 derniers caractères.

function simplifyString($str,$nb){

   if (!empty($str) && strlen($str)>$nb)
   {
      $str = substr($str, 0, ($nb/2))." [...] ".substr($str, strlen($str)-($nb/2), strlen($str));
   }

   return $str;


}


// transforme un booléen en un texte
function boolToText($bool){

	if(is_bool($bool)){
		if($bool){
			return "oui";
		}else{
			return "non";
		}
	}else{
		return null;
	}

}

// Met le premier caractère en majuscule et le reste en minuscule
function capitalise($str){

	$capitalised = "";

	$tab_str = mb_split("[- ]", $str);
	
	foreach($tab_str as $part){
		$first = mb_substr($part, 0, 1);
		$others = mb_substr($part, 1);
		$capitalised .= mb_strtoupper($first).mb_strtolower($others);
		$newlen = mb_strlen($capitalised);
		if($newlen < mb_strlen($str)){
			$capitalised .= mb_substr($str, $newlen, 1);
		}
	}
	unset($part);
	
	return $capitalised;

}

// affiche le statut de l'envoi d'un formulaire, mis en forme selon le nombre de messages et le type : 1 - succes | 2 - info | 3 - erreur (si type a une autre valeur, seul le message est affiché)
function afficherStatut($messages, $type=0){

	echo "<div class=\"statut\">";

	switch($type){
	case 1:	echo "<div class=\"titre-succes\">Succès</div>"; break; // en-tête d'un message de succès
	case 2:	echo "<div class=\"titre-info\">Information</div>"; break; // en-tête d'un message d'information
	case 3:	echo "<div class=\"titre-erreur\">Erreur</div>"; break; // en-tête d'un message d'erreur
	}

	if(is_array($messages)){ // si les messages sont stockés dans un tableau
		$nb_msg = count($messages); // on compte le nombre de messages à afficher
		if($nb_msg > 0){ // si il y a des messages à afficher
			echo "<div class=\"detail\">";
			if($nb_msg == 1){ // un seul message à afficher
				echo htmlentities($messages[0], ENT_NOQUOTES, "UTF-8");
			}else{ // une liste de messages à afficher
				echo "<ul>";
				foreach($messages as $message){
					echo "<li>".htmlentities($message, ENT_NOQUOTES, "UTF-8")."</li>";
				}
				unset($message);
				echo "</ul>";
			}
			echo "</div>";
		}
	}else if(is_string($messages)){ // si le message est un chaine de caractères
		if(!is_null($messages) && $messages != ""){ // si il y a un message a afficher
			echo "<div class=\"detail\">".htmlentities($messages, ENT_NOQUOTES, "UTF-8")."</div>";
		}
	}
	
	echo "</div>";

}

// créé un bouton renvoyant à l'adresse indiquée par $lien
function boutonRetour($lien){

	echo "<div class=\"retour\" onmouseover=\"this.className='retour-over';\" onmouseout=\"this.className='retour';\">&lt;&lt; <a href=\"".$lien."\">Retour</a></div>";

}

// applique strToLower() sur tous les éléments d'un tableau
function arraytolower(&$array, $include_leys=false) {
   
	if($include_leys) {
		foreach($array as $key => $value) {
			if(is_array($value)) $array2[strtolower($key)] = arraytolower($value, $include_leys);
			else $array2[strtolower($key)] = strtolower($value);
		}
		$array = $array2;
    } else {
		foreach($array as $key => $value) {
			if(is_array($value)) $array[$key] = arraytolower($value, $include_leys);
			else $array[$key] = strtolower($value);  
        }
    }
   
	unset($key);
	unset($value);
   
  } 

// applique trim sur tous les éléments d'un tableau dont le nom de la case commence par la valeur de $key
function trimTabByKey(&$tab, $key=NULL){

	$keySize = mb_strlen($key);

	foreach($tab as $id => $value){
		if(mb_strlen($id) >= $keySize){
			if(mb_substr($id, 0, $keySize) == $key){
				if(is_array($tab[$id])){
					trimTabByKey($tab[$id], null); 
				}else{
					$tab[$id] = trim($tab[$id]);
				}
			}
		}
	}
	unset($id);
	unset($value);

}

// Indique si oui ou non, toutes les valeurs d'un tableau sont uniques
function uniqueValues($tab){

	$nbValues = array_count_values($tab);
	
	foreach($nbValues as $nb){
		if($nb > 1){
			unset($nb);
			return false;
		}
	}
	unset($nb);
	
	return true;
	
}

// Indique si oui ou non, toutes les couples de valeurs entre deux tableaux sont uniques
function uniqueCouples($tab1, $tab2){
	
	$nbValues = count($tab1);
	
	for($i=0; $i<$nbValues; $i++){
		for($j=$i+1; $j<$nbValues; $j++){
			if($tab1[$i] == $tab1[$j]){
				if($tab2[$i] == $tab2[$j]){
					return false;
				}
			}
		}
	}
	
	return true;
	
}

// Indique si toutes les valeurs du premier tableau sont dans le second tableau
function valuesInArray($tab1, $tab2){

	foreach($tab1 as $value){
		if(!in_array($value, $tab2)){
			unset($value);
			return false;
		}
	}
	unset($value);
	return true;

}

// Coupe une chaine de caractère au milieu si sa taille est supérieure à $max
function truncate($str, $max){

	if(mb_strlen($str) > $max+5){
		$truncStr = mb_substr($str, 0, round($max/2));
		$truncStr .= "[...]";
		$truncStr .= mb_substr($str, mb_strlen($str)-round($max/2));
		return $truncStr;
	}else{
		return $str;
	}

}

// génére une chaine de caractère aléatoire suivant la longueur et la complexitée indiquée
function randomString($length, $complex){
	
	if($complex > 3){
		$complex = 3;
	}
	
	$str = "";

	for($i=1; $i<=$length; $i++){
		$type = rand(1, $complex);
		switch($type){
		case 1: $str .= rand(0, 9); break; // un chiffre
		case 2: $str .= chr(rand(97, 122)); break; // une minuscule
		case 3: $str .= chr(rand(65, 90)); break; // une majuscule
		}
	}
	
	return $str;

}

// teste la validitée du format d'un numéro de téléphone
function isPhoneFormat($var){

	$pattern = "^\+?[0-9]+$"; // masque de saisie :  un "+" facultatif suivi de chiffres.
	if(mb_ereg($pattern, $var) == 1){
		return true;
	}else{
		return false;
	}

}



// teste la validitée du format d'un code postal
function isPostalFormat($var){

	$pattern = "^[A-Za-z0-9]+$"; // masque de saisie :  alpha-numérique sans accent
	if(mb_ereg($pattern, $var) == 1){
		return true;
	}else{
		return false;
	}

}

// teste la validitée du format d'un nom (nom, prénom, ville, ...)
function isNameFormat($var){

	$pattern = "^[[:alpha:]]+([ -]{1}[[:alpha:]]+)*$"; // masque de saisie :  alphabetiques, espace ou trait d'union
	if(mb_ereg($pattern, $var) == 1){
		return true;
	}else{
		return false;
	}

}

// teste la validitée du format d'une adresse e-mail
function isEMailFormat($var){
	
	$pattern = "^[a-z0-9]+([\._-]{1}[a-z0-9]+)*@[a-z0-9]+([\.-]{1}[a-z0-9]+)*\.[a-z0-9]+$"; // masque de saisie : commence par un alpha-numérique, suivi éventuellement d'un séparateur (- . _) et d'alpha-numeriques, un "@", suivi d'alpha-numeriques, termine par un point suivi d'alpha-numériques
	if(mb_ereg($pattern, $var) == 1){
		return true;
	}else{
		return false;
	}
	
}

// teste la validitée du format d'une adresse internet
function isUrlFormat($var){
	
	$pattern = "^((http://)|(ftp://)|(https://))[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+(-[a-z0-9]+)*)*(/[a-z0-9.%_-]+)*/?$"; // masque de saisie :  commence par "http://" ou "https://" ou "ftp://", composé d'alpha-numériques ou ".", "/", "-"
	if(mb_ereg($pattern, $var) == 1){
		return true;
	}else{
		return false;
	}
	
}

// fonction qui insere un code qui redirige automatiquement vers la page indiquée après un certain délai
function redirection($page, $delai=0){

	if(is_numeric($delai)){
		$p = addslashes($page);
		$p = str_replace("\\\"", "\"", $p);
		echo "<script type=\"text/javascript\">redirection('".$p."', ".$delai.")</script>"; // redirection avec javascript
	}
	
}

// fonction qui insere un code qui ferme la fenêtre après un certain délai
function closeWindow($delai=0){

	if(is_numeric($delai)){
		echo "<script type=\"text/javascript\">closeWindow(".$delai.")</script>"; // fermeture avec javascript
	}
	
}
	
/*Cette fonction prend en parametre un message et affiche ce message dans le fichie de log d'erreur
correspondant au mois courant avec la date, l'heure et l'adresse IP de l'utilisateur*/
function logError($chaine,$baseDir=""){
	$chemin=$baseDir."/logs/erreurs/";
	$nomFichCourant="logErreur".date('Y_m').".txt";	
	//Si le fichier n'existe pas il sera cree automatiquement
	if($fd=fopen($chemin.$nomFichCourant,'a')){
		//Date et heure
		$debChaine=date("d-m-Y H:i:s");
		//Adresse IP
		$debChaine.=" ".$_SERVER['REMOTE_ADDR']." ";
		//Url de la page
		$debChaine.="(".$_SERVER["REQUEST_URI"].") : ".$chaine."\n";
		//On ecrit dans le fichier
		fputs($fd,$debChaine);
		fclose($fd);
	}
}

/*Cette fonction prend en parametre un message et affiche ce message dans le fichie de log d'erreur
correspondant au mois courant avec la date, l'heure et l'adresse IP de l'utilisateur */
function logAction($chaine,$baseDir=""){
	$chemin=$baseDir."logs/actions/";
	$nomFichCourant="logAction".date('Y_m').".txt";	

	//Si le fichier n'existe pas il sera cree automatiquement
	if($fd=fopen($chemin.$nomFichCourant,'a')){
		//Date et heure
		$debChaine=date("d-m-Y H:i:s");
		//Adresse IP
		$debChaine.=" ".$_SERVER['REMOTE_ADDR']." : ";
		//Url de la page
		$debChaine.=$chaine."\n";
		//On ecrit dans le fichier
		fputs($fd,$debChaine);
		fclose($fd);
	}
}

// Tente de se connecter à une base de donnée, renvoie un lien de connexion en cas de réussite et false en cas d'echec
function connexionBDD($host, $user, $pass, $db){

	// Connexion à la base de données
	$link = @mysql_connect($host, $user, $pass);
	
	if($link !== false){ // connexion réussie , on test que l'on renvoi le un BOOLEEN false
		// Selection de la base
		if(mysql_select_db($db, $link)){
			// Définition du charset d'échange avec la BDD
			if(mysql_set_charset('UTF8', $link)){
				return $link;
			}
		}
	}

	return false;
	
}

function afficheAutoCompl($item){

   $affiche = '<div class="autoCompl">';
	$affiche .= '<div id="lst_'.$item.'" class="intitule">';
	$affiche .= '<div class="titre"><span id="lst_'.$item.'-titre">suggestions :</span><div class="closeautoC">[<a href="#" onclick="document.getElementById(\'lst_'.$item.'\').style.display=\'none\'; return false;">X</a>]</div>';
   $affiche .= '</div>';
	$affiche .= '<div id="lst_'.$item.'-contenu" class="contenu"></div>';
	$affiche .= '</div>';
	$affiche .= '</div>';
   
   echo $affiche;
   
}

// savoir si le tableau ne comporte qu'une certaine valeur
function onlyValueInTabIs($tab,$index){
   $i=0;

   while($i<sizeof($tab)) {
   
      if(($tab[$i]!= NULL || $tab[$i]!= '')  && $i != $index){
         return false;
      }
   $i++;
      
   }
   return true;

}


// savoir si le tableau comporte une valeur précise
function valueIsInTab($tab,$value){
   $i=0;
   while($i<sizeof($tab)) {
      
      if($tab[$i]==$value){
         return true;
      }
   $i++;
      
   }
   return false;

}

// savoir si le tableau comporte une valeur précise
function valueIsInTab2($tab,$value){
   $i=0;
   while($i<sizeof($tab)) {
   
      if($tab[$i] == array()) {
         if(valueIsInTab($tab[$i],$value)){
            return true;
         }
      } else if($tab[$i]==$value){
         return true;
      }
   $i++;
      
   }
   return false;

}

function enteteListe($elt,$nbelt,$page,$ordre,$tri,$optionsURL,$popup) {

   
   $i=0;
   $nbPages=0;
   $ordre = "&amp;o=".$ordre;
   $optionsURL = "&amp;opt_let=".$optionsURL;

   if ($tri != ''){
      $tri = "&amp;t=".$tri;
   }
   
   if (is_numeric($nbelt) && is_numeric($page)){
      echo '<p class="colonne">';
   	echo 'Page : ';
         
      if($nbelt > 0){
   		$nbPages = ceil($nbelt/$GLOBALS['CONFIG']['nbParPage']);
         
         if ($page > 5 && ($page + 5) < $nbPages) {
            $arrondiFin = $page + 5;
         } else if ($nbPages < 10 || ($page + 5) >= $nbPages) {
            $arrondiFin = $nbPages;
         } else {
            $arrondiFin = 10;
         }
         
         if ($page > 5 && $nbPages > 10) {
            $arrondiDebut = $arrondiFin - 9;
         } else {
            $arrondiDebut = 1;
         }
               
   		for($i=$arrondiDebut; $i<=$arrondiFin; $i++){
   			if($page == $i){
   				echo " <b>".$i."</b>";
   			}else{
   				echo " <a href=\"index.php?p=gestion/".$elt."_gere&amp;l=".$i.$tri.$ordre.$optionsURL."#liste\">".$i."</a>";
   			}
   			if($i < $arrondiFin){
   				echo ", ";
   			}
   		}
         echo " sur ".$nbPages;
   	}else{
   		echo '<i>aucune</i>';
   	}
      
      echo '</p>';      
      displayAdd($elt,$popup);
      
      
      if (($page-10) < 0) {
         $moins10 = 1;
         $moins100 = 1;
      } else {
         $moins10 = $page-10;
         if (($page-100) < 0) {
            $moins100 = 1;
         } else {
            $moins100 = $page-100;
         }
      }
            
      if ($page+10 > $nbPages) {
         $plus10 = $nbPages;
         $plus100 = $nbPages;
      } else {
         $plus10 = $page+10;
         if (($page+100) > $nbPages) {
            $plus100 = $nbPages;
         } else {
            $plus100 = $page+100;
         }
      }
            
      if ($nbPages > 10) {
         echo '<p class="colonne">';
         echo '<span><a href="index.php?p=gestion/'.$elt.'_gere&amp;l=1'.$tri.$ordre.$optionsURL.'#liste"><<</a></span>';
         if($nbPages > 100){
            echo '<span style="padding-left: 15px;"><a href="index.php?p=gestion/'.$elt.'_gere&amp;l='.$moins100.$tri.$ordre.$optionsURL.'#liste">-100</a></span>';
         }
         echo '<span style="padding-left: 15px;"><a href="index.php?p=gestion/'.$elt.'_gere&amp;l='.$moins10.$tri.$ordre.$optionsURL.'#liste">-10</a></span>';
         echo '<span style="padding-left: 15px;"><a href="index.php?p=gestion/'.$elt.'_gere&amp;l='.$plus10.$tri.$ordre.$optionsURL.'#liste">+10</a></span>';
         if($nbPages > 100){
            echo '<span style="padding-left: 15px;"><a href="index.php?p=gestion/'.$elt.'_gere&amp;l='.$plus100.$tri.$ordre.$optionsURL.'#liste">+100</a></span>';
         }
         echo '<span style="padding-left: 15px;"><a href="index.php?p=gestion/'.$elt.'_gere&amp;l='.$nbPages.$tri.$ordre.$optionsURL.'#liste">>></a></span>';
         echo '</p>';
      }    
   } 

}

function displayAdd($elt,$popup){

   if($GLOBALS['USER']['level'] >= 4 || $GLOBALS['USER']['admin']){ // l'utilisateur a le droit d'ajouter
      
   	echo '<p class="colonne2">
   		<img src="images/ajouter.gif" alt="+" /> <a href="'.($popup?'popup':'index').'.php?p=gestion/'.$elt.'_ajoute'.($popup?$popup.'&act=1" onclick="popup(this.href, 520, 500); return false;"':'"').'>Ajouter</a>
   	</p>';
   
   }

}

function displayListe($elt,$size,$nb_total,$opt_let,$popupAdd,$popupDisplay,$extraIcon) {

   $nbPages = $GLOBALS['CONFIG']['nbParPage'];
   global $page,$ordre,$tri,$tabth,$tab_result;
   $nb_result = count($tab_result);
   
   
   echo '<div style="width: '.$size.'px; margin: auto;">';
   enteteListe($elt,$nb_total,$page,$ordre,$tri,$opt_let,$popupAdd);  
 /*  echo '<div class="semtable">';
   
   if(is_array($tabth)) {
      for($i=0;$i<count($tabth);$i++){
   		echo '<p class="test"><a href="index.php?p=gestion/'.$elt.'_gere&amp;l='.$page;
         echo '&amp;t='.($i+1);
         echo '&amp;o='.($ordre+1)%2;     
         echo $optionsURL.'#liste">'.$tabth[$i].'</a>';
   		
   		if($tri == ($i+1)){
            if($ordre == 1){
               echo "▲";
   			}else{
   				echo "▼";
   			}
   		}		
   		echo '</p>';
      }
   } else {
   
      echo '<p class="test"><a href="index.php?p=gestion/'.$elt.'_gere&amp;l='.$page;
         echo '&amp;o='.($ordre+1)%2;     
         echo $optionsURL.'#liste">'.$tabth.'</a>';
         
            if($ordre == 1){
               echo "▲";
   			}else{
   				echo "▼";
   			}		
   		echo '</p>';
   
   }
	echo ' <p class="test2"><span style="font-style: italic;">Actions</span></p>';
   
   echo '</div>'; */
   
   echo '<table class="liste" style="width: 100%; margin: auto; clear: both;"><tr>';
   if(is_array($tabth)) {
      for($i=0;$i<count($tabth);$i++){
   		echo '<th>';
         if ($tabth[$i] != "Statut"){
            echo '<a href="index.php?p=gestion/'.$elt.'_gere&amp;l='.$page;
            echo '&amp;t='.($i+1);
            echo '&amp;o='.($ordre+1)%2;  
            if (strlen($opt_let<2) || $opt_let == "all") {
               echo '&amp;opt_let='.$opt_let.'#liste">'.$tabth[$i].'</a>';
            }else {
               echo $opt_let.'#liste">'.$tabth[$i].'</a>';
            }
      		
      		if($tri == ($i+1)){
               if($ordre == 1){
                  echo "▲";
      			}else{
      				echo "▼";
      			}
      		}  
         } else {
         
         echo $tabth[$i];
         }
   		echo '</th>';
      }
   } else {
   
      echo '<th><a href="index.php?p=gestion/'.$elt.'_gere&amp;l='.$page;
         echo '&amp;o='.($ordre+1)%2;
         
         if ((strlen($opt_let)<2 || $opt_let == "all") && $opt_let!='') {
            echo '&amp;opt_let='.$opt_let.'#liste">'.$tabth.'</a>';
         }else {
            echo $opt_let.'#liste">'.$tabth.'</a>';
         }
         
            if($ordre == 1){
               echo "▲";
   			}else{
   				echo "▼";
   			}		
   		echo '</th>';
   
   }
	echo ' <th style="max-width: 110px;"><span style="font-weight: normal; font-style: italic;">Actions</span></th>
		</tr>';
	
   if ($tab_result != NULL) {
   
      $nbElt=count($tab_result[0]);
      
   	if($nb_result > 0){
   		for($j=0;$j<$nb_result;$j++){
            echo "<tr onmouseover=\"this.className='over';\" onmouseout=\"this.className='';\">";
            if(is_array($tab_result[$j])) {
            
               for($k=1;$k<$nbElt;$k++){
                  if (isset($tab_result[$j][$k]) && $tab_result[$j][$k] != ''){
                     echo "<td>".$tab_result[$j][$k]."</td>";
                  } else {
                     echo "<td>--</td>";
                  }
               }
               
            }else{
            
               if ($tab_result[$j] != ''){
                  echo "<td>".$tab_result[$j]."</td>";
               } else {
                  echo "<td>--</td>";
               }
            
            }
   			echo '<td>';
            if($popupDisplay){
               echo "<a href=\"popup.php?p=gestion/".$elt."_affiche_popup&amp;id=".$tab_result[$j][0]."\" onclick=\"popup(this.href, 550, 400); return false;\"><img src=\"images/voir.gif\" title=\"Afficher le détail\" alt=\"Voir\" /></a>";
   			}
            if($GLOBALS['USER']['level'] >= 4 || $GLOBALS['USER']['admin']){ // l'utilisateur a le droit de modifier
   				echo " <a href=\"index.php?p=gestion/".$elt."_edite&amp;id=".$tab_result[$j][0]."\"><img src=\"images/editer.gif\" title=\"Editer les informations\" alt=\"Editer\" /></a>";
   			}
   			if((($elt != "utilisateur" && $elt != "personne") || ($elt == "utilisateur" && $tab_result[$j][0] != $_SESSION['user_id']) || ($elt == "personne" && $tab_result[$j][0] != $GLOBALS['USER']['idPersonne'])) && ($GLOBALS['USER']['level'] >= 5 || $GLOBALS['USER']['admin'])){ // l'utilisateur a le droit de supprimer
   				echo " <a href=\"index.php?p=gestion/".$elt."_supprime&amp;id=".$tab_result[$j][0]."\" onclick=\"return confirm('Etes-vous sûr de vouloir supprimer ?');\"><img src=\"images/supprimer.gif\" title=\"Supprimer l'entrée\" alt=\"Supprimer\" /></a>";
   			}

            if (isset($extraIcon[$j])){
               echo $extraIcon[$j];
            }
   			echo "</td>";
   			echo "</tr>";
   		}
   		unset($tab_result);
   	} 
   } else {
   	echo "<tr><td class=\"vide\" colspan=\"".(count($tabth)+1)."\">Aucune entrée</td></tr>";
   }
   
   
   echo '</table></div>';
   
   if ((strlen($opt_let)<2 || $opt_let == "all") && $opt_let!='') {
      displayOptions($elt,$size,$page,$ordre,$tri,$opt_let);
   }
   
}

function displayOptions($elt,$size,$page,$ordre,$tri,$opt_let) {

   echo '<div style="font-size: 12px; width: '.$size.'px; margin: auto;">';
	echo '<b>Trier par nom :</b>';
   
   
		for($c=0; $c<=25; $c++){
			if(isset($opt_let) && $opt_let == chr(97+$c)){
				echo "<b>".chr(65+$c)."</b> ";
			}else{
				echo "<a href=\"index.php?p=gestion/".$elt."_gere&amp;l=1&amp;t=".$tri."&amp;o=".$ordre."&amp;opt_let=".chr(97+$c)."#liste\">".chr(65+$c)."</a> ";
			}
		}
		if($opt_let != 'all'){
			echo "(<a href=\"index.php?p=gestion/".$elt."_gere&amp;l=1&amp;t=".$tri."&amp;o=".$ordre."#liste\">tous</a>)";
		}else{
			echo "(<b>tous</b>)";
		}

   echo '</div>';

}

?>